﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Lwm.x10c.Assemble;
using Lwm.x10c.Emulator;

namespace AsmEmuExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembler a = new Assembler();

            // lab1:
            a.Label("lab1");

            // A = 30 (1 word instruction)
            a.Add().Reg(Reg.A).Literal(1);

            // B = 42 (2 word instruction)
            a.Set().Reg(Reg.B).Literal(42);

            // *(B + 158) = A
            a.Set().RegOff(Reg.B, 158).Reg(Reg.A);

            // C = 40
            a.Set().Reg(Reg.C).Literal(50);

            // C = C + *(200);
            a.Add().Reg(Reg.C).Mem(200);

            // push(*(200))
            a.Set().Push().Mem(200);

            // 3 > A
            a.Ifg().Literal(3).Reg(Reg.A);

            // jmp lab1
            a.Jump("lab1");

            // X = pop()
            a.Set().Reg(Reg.X).Pop();


            var code = a.GetCode();
            Cpu cpu = new Cpu(code);
            cpu.CycleLength = TimeSpan.FromMilliseconds(100);
            cpu.Execute();

            Console.ReadLine();
        }
    }
}
